package com.itheima.pinda.common.utils;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Locale;

/**
 * 通过放射方式, 给一个对象的字段赋值
 *
 * @author hliushi
 * @date 2021/10/4 13:28
 **/
@Slf4j
public class SetFieldUtil {

    /**
     * 通过反射给Obj对象的fieldName字段设置val值
     *
     * @param fieldName 字段
     * @param val       字段值
     * @param obj       对象
     **/
    public static void setField(String fieldName, String val, Object obj) {
        String setMethod = "set" + fieldName.substring(0, 1).toUpperCase(Locale.ROOT) + fieldName.substring(1);
        try {
            Method method = obj.getClass().getMethod(setMethod, String.class);
            method.invoke(obj, val);
        } catch (NoSuchMethodException e) {
            log.error("无对应set方法, fieldName: {}", setMethod);
        } catch (IllegalAccessException | InvocationTargetException e) {
            log.error("反射调用set方法失败!");
        }
    }

}
